perm filename LODLAP.MAN[VLI,LSP] blob
sn#382024 filedate 1978-09-08 generic text, type T, neo UTF8
CHAPITRE 11
LE LAP ET LE LAPACK
LAP est un assembleur (ressemblant a l'assembleur du PDP10), concu
pour etre utilise par VLISP-10.3 et prevu originellement pour
charger le code issu du compilateur. Il peut etre utilise seul pour
ecrire de nouvelles fonctions standards. Un minimum de
connaissances de l'assembleur PDP10 et de l'organisation de
l'interprete est requis pour utiliser le LAP sans degats.
LAP recoit en argument une liste dont les elements peuvent etre :
- des atomes litteraux (qui servent d'etiquettes)
- des listes representant des instructions normales, des
pseudos-instructions, ou des macros-LAPs (MACLAPs).
Cette liste peut etre remplacee par un fichier s'il y a beaucoup
d'instructions a charger.
Apres assemblages ces instructions sont chargees en memoire dans une
zone code prevue a cet effet. Si cette zone se revele trop petite
une erreur apparait; le libelle de cette erreur est :
** no room for code.
Cette erreur est fatale. Il faut augmenter la taille de la zone
allouee au code (dans la fonction CONFIGURATION du fichier initial
CONFIG.INI) et relancer tout le chargement.
11.1 LES REGISTRES
L'interprete utilise les 16 registres de la machine de la maniere
suivante :
no symbol remarques
00 RG est le registre general lui-meme. On peut donc tester
directement au moyen d'un masque les bits utiles.
01 A1 accumulateur 1 !
02 A2 accumulateur 2 ! Seuls ces 4 registres sont nettoyes par
03 A3 accumulateur 3 ! le G.C.
04 A4 accumulateur 4 !
VLISP 10 . 3 Manuel de Reference Page 11-2
05 A5 accumulateur 5
06 A6 accumulateur 6 Ces 4 registres font office de registres
07 A7 accumulateur 7 auxiliaires.
10 A8 accumulateur 8
11 U1 user 1 ! Ces 2 registres ne sont
12 U2 user 2 ! jamais utilises par l'interprete
! et sont donc reserves pour l'utilisateur.
13 L link est utilise pour les appels de S.P
de type JSP.
14 STRG contient toujours le pointeur sur la liste
libre des chaines.
15 NUMB contient toujours le pointeur sur la liste
libre des nombres.
16 FREE contient toujours le pointeur sur la liste
libre des listes.
17 P est le pointeur sur l'unique pile utilisee
par l'interprete.
11.2 FORMAT EXTERNE D'UNE INSTRUCTION
Chaque instruction est representee par une liste de la forme :
( <codop> <registre> @ <adr> <index> )
<codop> - est le mnemonique de l'instruction (tous les mnemoniques
des instructions PDP10 sont disponibles en revanche les mnemoniques
des CALLI et des TTCALL ne le sont pas).
<registre> - est le numero ou le symbole du registre 1er operande.
@ - si cet atome est present (et a cette position), le bit
d'indirection de l'instruction sera positionne.
<adr> - represente la valeur du champ adresse qui sera charge dans
les 18 bits de poids faibles de l'instruction (la description de ce
champ suit).
<index> - est le numero ou le symbole du registe d'index. Ce
dernier champ est optionnel.
le champ <adr> peut avoir la representation suivante :
- un nombre (utilise dans les intructions possedant des valeurs
immediates).
VLISP 10 . 3 Manuel de Reference Page 11-3
- un atome litteral qui peut etre :
- un symbole de registre
- une etiquette
- un symbole special. LAP connait en effet certaines adresses
utiles de l'interprete. Ces adresses ont ete chargees par le
LINK-10 . Elles sont representees par un symbole dont le 1er
caractere est toujours un " : ".
- une liste representant :
- ( nombre ) une adresse relative au debut de chargement.
- (* nombre) une adresse relative au compteur d'assemblage.
- (QUOTE objet lisp) ou ' objet lisp , l'adresse de l'objet
lisp specifie. Cette adresse est en realite l'index de cet
objet par rapport au debut de la zone des objets lisps.
- (+ <adr1> ... <adrN> ) la somme des differentes adresses
specifiees.
- (:MEM <adr>) cet operande est la forme abregee de :
(+ :MEM <adr>).
exemples d'instructions :
(MOVEI A1 2)
(MOVE A1 @ TAB A5)
(CAML A4 :BLIST)
(JRST 0 (* -5))
(CAIE A4 'LAMBDA)
(HRRZ A3 (+ :MEM 'X))
11.3 LES PSEUDOS-INSTRUCTIONS
LAP connait un certain nombre de pseudos-instructions dont la forme
externe est identique a celle des instruction normales.
(COMMENT ... ) ou (* ... )
cette pseudo-instruction est completement ignoree du LAP. Elle
permet d'inserer des commentaires a l'interieur d'un programme
LAP.
(END)
indique la fin d'un assemblage (un 2eme peut suivre dans la
liste des instructions fournie au LAP). Cette pseudo est
automatiquement generee en fin de liste (ou de fichier)
d'instructions ; elle n'est donc pas obligatoire.
(ENTRY <nom> <type> <nombre>)
permet de definir le point d'entree d'une fonction qui devient
une fonction standard de VLISP. Le nom de la fonction <nom>
doit etre un atome litteral, le type de cette fonction peut
VLISP 10 . 3 Manuel de Reference Page 11-4
etre SUBR ou FSUBR. Si le type est SUBR on peut specifier son
nombre d'arguments (si cette fonction possede un nombre
d'arguments plus petit ou egal a 3).
ex : (ENTRY FACT SUBR 1)
(EVAL <s>)
evalue l'expression <s> specifiee en argument. Cette
pseudo-instruction ne charge aucun mot memoire mais permet
d'acceder directement a l'interprete.
ex: (EVAL (PRINT "2eme partie."))
(EXP <adr>)
reserve un mot qui est initialise avec la valeur de <adr>.
ex : (EXP -1)
(OPCD <symbole> <valeur>)
permet de definir de nouveaux mnemoniques pour les codes
instructions.
ex : (OPCD PJRST \254)
(QUOTE <s>) ou bien ' <s>
reserve un mot contenant un pointeur sur l'objet lisp <s>
specifie.
(REGISTER <symbole> <valeur>)
permet de definir de nouveaux mnemoniques pour les regsitres.
L'argument <symbole> doit etre un atome litteral, et sa valeur
associee <valeur> doit etre comprise dans l'intervalle [0 ,
15].
ex : (REGISTER PILE \17)
(VALAP <symbole> <valeur>)
permet de definir de nouveaux symboles dont la valeur est
donnee explicitement. L'argument <symbole> doit etre un atome
litteral et sa valeur <valeur> numerique.
ex : (VALAP :JBSYM \116)
(XWD <adr> <adr> ) abreviation [<adr> <adr>]
reserve un mot dont les 2 demis-mots sont initialises avec les
valeurs des operandes fournis.
ex : (XWD -1 (+ :MEM (* 3)))
VLISP 10 . 3 Manuel de Reference Page 11-5
11.4 LES MACROS-LAP
Il est possible de definir des macros en utilisant la pseudo
suivante :
(MACLAP <nom> <liste d'argument> <corps de la fonction> )
cette pseudo-instruction permet de definir les MACLAP . A
l'apparition d'une intruction de la forme (<nom> <arg1> ..
<argN>) dans laquelle <nom> est le nom d'une MACLAP, la
fonction specifiee est appellee avec <arg1> ... <argN> comme
arguments. C'est la valeur ramenee par cette application qui
est assemblee. Cette valeur doit etre une liste d'instructions
LAP (qui sera donc reassemblee) ou bien NIL auquel cas rien
n'est assemble,
exemple de definition de MACLAP :
(MACLAP INCR (ATOM)
[['HLRZ 1 ['+ ':MEM [QUOTE ATOM]]]
'(PUSHJ P ADD1)
['HRLM 1 ['+ ':MEM [QUOTE ATOM]]]])
l'appel de (INCR X)
sera expanse en (HLRZ 1 (+ :MEM 'X))
(PUSHJ P ADD1)
(HRLM 1 (+ :MEM 'X))
Les MACLAPs sont tres puissantes car elles donnent acces a
l'interprete lui-meme et permettent de deninir des
pseudos-instructions tres sophistiquees.
Ces MACROs sont toujours traitees en premier lieu; on peut donc
redefinir toutes les instructions ainsi que les pseudos-instructions
standards.
Il existe un certain nombre de MACLAP predefinies qui possedent les
definitions suivantes :
CAR (MACLAP CAR (D S) [['HLRZ D ':MEM S]])
CDR (MACLAP CDR (D S) [['HRRZ D ':MEM S]])
JPLIST (MACLAP JPLIST (R A)
[['CAMGE R ':BLIST]
['JRST 0 A]])
JNLIST (MACLAP JNLIST (R A)
[['CAML R ':BLIST]
['JRST 0 A]])
CONS (MACLAP CONS (R)
VLISP 10 . 3 Manuel de Reference Page 11-6
[ '(JUMPN FREE (* 2))
'(PUSHJ P :GARBCL)
['EXCH R ':MEM 'FREE]
['EXCH 'FREE R]])
UNCONS (MACLAP UNCONS (R CAR CDR)
(IF (NEQ R CDR)
[['HRRZ CDR ':MEM R]
['HLRZ CAR ':MEM R]]
[['HLRZ CAR ':MEM R]
['HRRZ CDR ':MEM R]])
11.5 ACCES AUX OBJETS LISPS
Les atomes litteraux, les nombres, les chaines et les listes sont
stockees dans des zones fixes du LOWSEG. Ces objets sont toujours
representes d'une maniere interne par un -pointeur- sur ces zones ;
ce pointeur n'est pas une adresse physique mais un index par-rapport
au debut de cette zone. On a acces aux limites de ces zones au
moyen de symboles speciaux (dont le 1er caractere est un ":") qui
sont connus du LAP.
:MEM adresse physique du debut
de la zone des objets LISPs.
- ZONE DES ATOMES LITTERAUX -
:BNUMB index du debut de la zone
des nombres.
- ZONE DES NOMBRES -
:BSTRG index du debut de la zone
des chaines.
- ZONE DES CHAINES -
:BLIST index du debut de la zone
des listes.
- ZONE DES LISTES -
11.6 TEST DE TYPE
Grace a ce decoupage de la memoire, le test de type se ramene a une
comparaison avec les limites des zones, ce qui est tres efficient.
Le 1er atome stocke dans la zone des atomes litteraux est l'atome
NIL ; la valeur de son index est 0 ; les tests par-rapport a NIL
VLISP 10 . 3 Manuel de Reference Page 11-7
peuvent se coder en une seule instruction (JUMPE ou JUMPN).
ex : branchement si A1 est un nombre
(CAML A1 :BNUMB)
(CAML A1 :BSTRG)
(JRST 0 quelquepart)
11.7 CREATION D'OBJETS
Pour creer un atome litteral, il faut preparer dans un petit buffer
(de 3 mots) de nom :PNAME (ce nom est connu de LAP) le P-name de
l'atome que l'on veut creer puis appeller une routine de
l'interprete de nom :TRYATOM au moyen d'un (PUSHJ P :TRYATOM). Ce
buffer doit contenir les caracteres de P-name en code ASCII. Le 1er
caractere doit etre le nombre total de caracteres du P-name. Ce
buffer est complete avec des 0. Au retour le registre A1 contient
le pointeur sur ce nouvel atome.
Pour creer un nombre, il faut mettre sa valeur dans le registre A5
puis appeller la routine :CRANUM pour creer un nombre entier ou bien
la routine :CRAFLT pour un nombre flottant au moyen d'un (PUSHJ P
:CRANUM / :CRAFLT). Au retour le registre A1 contient le pointeur
sur ce nouveau nombre.
Pour creer une chaine, il faut mettre la liste contenant tous les
caracteres (sous forme atomique) dans le registre A1 puis appeller
la routine de l'interprete :CRASTR au moyen d'un (PUSHJ P :CRASTR).
Au retour le registre A1 contient le pointeur sur cette nouvelle
chaine.
On peut creer un doublet de liste directement. Il faut preparer un
registre quelconque (A1 A2 A3 ou A4) avec en partie gauche le CAR du
doublet et en partie droite son CDR puis tester si la liste libre
des doublets (pointee par le registre FREE) n'est pas vide (auquel
cas il faut appeller le "Garbage-Collecting") et enfin stocker le
doublet et actualiser FREE. Ces operations peuvent s'ecrire :
; preparation du registre A1
(JUMPN FREE (* 2)) ; si FREE est vide,
(PUSHJ P :GARBCL ) ; appeller le G.C.
(EXCH A1 :MEM FREE) ; creation du doublet
(EXCH FREE A1) ; actualisation de FREE
; le pointeur obtenu se trouve dans A1
VLISP 10 . 3 Manuel de Reference Page 11-8
11.8 APPEL DES FONCTIONS
Toutes les fonctions de l'interprete sont appellees au moyen d'un
PUSHJ P a l'adresse de lancement de la fonction. Toutes les
fonctions doivent donc se terminer par un POPJ P. Les arguments des
fonctions sont transmis dans differents registres en fonction du
type de la fonction. Cette transmission est effectuee
automatiquement, avant l'appel des fonctions, par les fonctions
interprete EVAL ou APPLY. Quelque soit le type d'une fonction, sa
valeur est toujours retournee dans le registre A1 (il faut donc que
ce registre soit charge avant le retour de la fonction). Les
fonctions de type SUBRs a 1 argument recoivent leur argument evalue
dans le registre A1, les SUBRs a 2 arguments recoivent leurs
arguments evalues dans les registres A1 (pour le 1er) et A2 (pour le
2eme), les SUBRs a 3 arguments recoivent leurs argments evalues dans
les registres A1 (pour le 1er) A2 (pour le 2eme) et A3 (pour le
3eme), les SUBRs a nombre quelconque d'arguments recoivent une liste
contenant tous les arguments evalues dans le registre A4, les
fonctions de type FSUBRs recoivent la liste des arguments
non-evalues dans le registre A1.
11.9 LES FONCTIONS STANDARDS UTILISEES PAR LE LAP
Le LAP utilise un certain nombre de fonctions speciales de
l'interprete. Ces fonctions sont tout naturellement disponibles.
(GETSYMBOL <a>) [SUBR a 1 argument]
ramene la valeur du symbole atomique <a>. Cet atome litteral
doit commencer par le caractere special : et avoir moins de 7
caracteres au total donc etre de la forme :xxxxxx . Si l'atome
<a> ne possede pas de valeur, GETSYMBOL ramene NIL.
ex : (GETSYMBOL ':GARBCL) -> 1220 (par exemple)
(GETSYMBOL ':XYZ) -> NIL
(OPCD <a>) [SUBR a 1 argument]
ramene le code operation de l'instruction de nom <a>. Si <a>
n'est pas un mnemonique d'une fonction connue, OPCD ramene NIL.
ex : (OPCD 'JRST) -> 254
(OPCD 'PJRST) -> NIL
VLISP 10 . 3 Manuel de Reference Page 11-9
(REGISTER <a>) [SUBR a 1 argument]
ramene la valeur de l'atome <a> considere comme le nom d'un
registre. Cette fonction connait le nom des registres
standards. Si <a> n'est pas le nom d'un registre standard,
REGISTER ramene NIL.
ex : (REGISTER 'A5) -> 5
(REGISTER 'A9) -> NIL
11.10 LES FONCTIONS STANDARDS DU LAP
Les fonctions du LAP sont de type AUTOLOAD (i.e. il n'est pas
besion de charger le fichier qui les contient, le systeme le fera
automatiquement pour vous au premier appel de l'une de ces
fonctions).
D'ordinaire ces fonctions se trouvent dans le fichier :
(SYS (LODLAP . VLI)) pour la version interpretee
(SYS (LODLAP . VLA)) pour la version compilee lisible
(SYS (LODLAP . VLO)) pour la version compilee chargeable
(LAP <l> <sw1>) [SUBR a 2 arguments]
est la principale fonction du LAP. Le premier argument <l>
doit etre une liste d'instructions LAP; le deuxieme argument
<sw1> est un indicateur qui vaut T si vous desirez un listage
de l'assemblage. Le LAP etant un assembleur "une passe", les
adresses des "references avant" ne sont pas correctes (et
valent toujours 0).
(LAPFILE <filout> <filin> <sw1>) [SUBR a 3 arguments]
le fichier d'entree <filin> est un fichier qui ne doit contenir
que des instructions LAP. LAPFILE va assembler et charger ces
instructions. Le fichier de sortie <filout> contiendra tous
les points d'entree du fichier charge, ainsi que les erreurs le
cas echeant. Si l'indicateur <sw1> = T un listage de
l'assemblage sera produit egalement sur le fichier de sortie
<filout>. Comme pour la fonction LAP, l'assembleur n'executant
qu'une passe, les adresses des "references avant" ne seront pas
correctes (et auront toujours la valeur 0). Si le fichier de
sortie <filout> n'est pas fourni (i.e. si <filout> = NIL), le
fichier (DSK (LODLAP . LOD) (GETPPN) \055) sera utilise.
L'extension standard des fichiers de sortie de LAPFILE est .LOD
. Si le fichier d'entree <filin> n'est pas fourni (i.e. si
<filin> = NIL) le fichier (DSK (LODLAP . VLA) (GETPPN)) sera
utilise. L'extension standard des fichiers d'entree de LAPFILE
est .VLA .
VLISP 10 . 3 Manuel de Reference Page 11-10
LAPFILE ramene en valeur le nom du fichier de sortie utilise.
(LAPF <file> <sw1>) [FSUBR]
est une forme abregee de la fonction LAPFILE. L'appel (LAPF
<file> <sw1>) correspond a l'appel suivant :
(LAPFILE '(DSK (<file> . LOD) (GETPPN) \055)
'(DSK (<file> . VLA))
<sw1>)
LAPF permet donc de charger un fichier d'intructions LAP
d'extension .VLA comme par exemple des fichiers issus du
compilateur.
(LAPEND) [SUBR a 0 argument]
permet de recuperer la place occupee par les fonctions du LAP,
ainsi que les indicateurs places sur certains atomes par le
LAP. Si certains atomes contiennent toujours des references
non resolues (ces atomes possedent sur leur P-liste
l'indicateur *UDS ), un avertissement est donne sous la forme :
** undefined symbol : le nom de la fonction toujours inconnue.
11.11 LES ERREURS DETECTEES PAR LE LAP
Durant l'assemblage, un certain nombre d'erreurs sont detectees par
le LAP. Ces erreurs ne sont jamais fatales mais le code genere est
bien evidemment faux. Le libelle d'erreur est le suivant :
** lod error : <type> = <arg>
dans lequel le type de l'erreur <type> est imprime ainsi que
l'argument defectueux.
Les differents types d'erreur sont :
ADRESS - l'operande de type <adr> est erronne.
GETSYMBOL - un symbole commencepar le caractere special : mais
n'est pas connu de l fonction GETSYMBOL et n'a pas ete declare
au moyen de la pseudo-instruction VALAP.
LOD ou LODMEM - instruction inconnue.
OPCD - le champ <opcd> d'une instruction est mal code ou bien la
pseudo-instruction OPCD est mal employee.
REG - un des champs <registre> ou <index> d'une instruction est
incorrect.
VLISP 10 . 3 Manuel de Reference Page 11-11
REGISTER - mauvaise utilisation de la pseudo-instruction REGISTER.
11.12 EXEMPLES D'UTILISATION DU LAP
11.13 LE LAPACK
Les fichiers contenant du LAP (d'extension .VLA) sont tres lisibles
mais sont volumineux et longs a charger. Les fonctions du LAPACK
vont tasser des instructions LAP en effectuant une premiere passe
qui va resoudre toutes les references absolues, les noms de
registres, les codes instructions et d'une maniere generale tout ce
qui n'est pas relocatable. Le resultat en est une nouvelle liste
(ou un nouveau fichier) d'instructions LAP "tassees", chargeables
plus rapidement mai devenues "illisibles".
Les fonctions du LAPACK sont de type AUTOLOAD (i.e. il n'est pas
besion de charger le fichier qui les contient, le systeme le fera
pour vous automatiquement au premier appel de l'une de ces
fonctions.
D'ordinaire ces fonctions se trouvent dans le fichier :
(SYS (LAPACK . VLI)) pour la version interpretee
(SYS (LAPACK . VLA)) pour la version compilee lisible
(SYS (LAPACK . VLO)) pour la version chargeable
(LAPACK <l>) [SUBR a 1 argument]
tasse la liste d'instructions LAP <l>, et ramene une nouvelle
liste d'instructions tassees.
(LAPACKFILE <filout> <filin>) [SUBR a 2 arguments]
Le fichier <filin> est un fichier qui ne contient que des
instructions LAP, LAPACKFILE va creer un nouveau fichier
<filout> qui contiendra toutes les intructionsdu fichier
d'entree <filin> en format tasse. Ce nouveau fichier est bien
entendu cahrgeable par le LAP.
Si le fichier de sortie <filout> n'est pas fourni (i.e. si
<filout> = NIL) alors le fichier
(DSK (LAPACK . VLO) (GETPPN) \055) est utilise. L'extension
standard des fichiers de sortie du LAPACKFILE est .VLO . Si le
fichier d'entree <filin> n'est pas fourni (i.e. si
<filin> = NIL) alors le fichier (DSK (LAPACK . VLA) (GETPPN))
est utilise. L'extension standard des fichiers d'entree du
LAPACKFILE est .VLA .
LAPACKFILE ramene en valeur le nom du fichier de sortie
utilise.
VLISP 10 . 3 Manuel de Reference Page 11-12
(LAPACKF <file> <sw1>) [FSUBR]
est une forme abregee de la fonction LAPACKFILE. L'appel
(LAPACKF <file> <sw1>) correspond a l'appel suivant :
(LAPACKFILE '(DSK (<file> . VLO) (GETPPN) \055)
'(DSK (<file> . VLA))
<sw1>)
LAPACKF permet donc de tasser un fichier d'intructions LAP
d'extension .VLA comme par exemple des fichiers issus du
compilateur.
11.14 EXEMPLES D'UTLISATION DU LAPACK
Page Index-1
TABLE D'INDEX DU LAP ET DU LAPACK.
(* ... ) peudo LAP . . . . . . . 11-3
(CAR d s) macro LAP . . . . . . 11-5
(CDR d s) macro LAP . . . . . . 11-5
(COMMENT ... ) pseudo LAP . . . . 11-3
(CONS r) macro LAP . . . . . . . 11-5
(END) pseudo LAP . . . . . . . . 11-3
(ENTRY nom type nombre) pseudo LAP 11-3
(EVAL s) pseudo LAP . . . . . . . 11-4
(EXP adr) pseudo LAP . . . . . . 11-4
(GETSYMBOL a) SUBR a 1 argument . 11-8
(JNLIST r a) macro LAP . . . . . 11-5
(JPLIST r a) macro LAP . . . . . 11-5
(LAP l sw1) SUBR a 2 arguments . 11-9
(LAPACK l) SUBR a 1 argument . . 11-11
(LAPACKF file sw1) FSUBR . . . . 11-12
(LAPACKFILE filout filin) SUBR a 2 arguments 11-11
(LAPEND) SUBR a 0 argument . . . 11-10
(LAPF file sw1) FSUBR . . . . . . 11-10
(LAPFILE filout filin sw1) SUBR a 3 arguments 11-9
(MACLAP nom arg corps) pseudo LAP 11-5
(OPCD a) SUBR a 1 argument . . . 11-8
(OPCD symbole valeur) pseudo LAP 11-4
(QUOTE s) pseudo LAP . . . . . . 11-4
(REGISTER a) SUBR a 1 argument . 11-9
(REGISTER symbole valeur) pseudo LAP 11-4
(UNCONS r car cdr) macro LAP . . 11-6
(VALAP symbole valeur) pseudo LAP 11-4
(XWD adr1 adr2) pseudo LAP . . . 11-4
* . . . . . . . . . . . . . . . . 11-3
** lod error : <type> = <arg> . . 11-10
** no room for code. . . . . . . . 11-1
** undefined symbol . . . . . . . 11-10
*UDS . . . . . . . . . . . . . . . 11-10
+ . . . . . . . . . . . . . . . . 11-3
.LOD . . . . . . . . . . . . . . . 11-9
.VLA . . . . . . . . . . . . . . . 11-9, 11-11
.VLO . . . . . . . . . . . . . . . 11-11
: . . . . . . . . . . . . . . . . 11-3
:BLIST . . . . . . . . . . . . . . 11-6
:BNUMB . . . . . . . . . . . . . . 11-6
:BSTRG . . . . . . . . . . . . . . 11-6
:CRAFLT . . . . . . . . . . . . . 11-7
:CRANUM . . . . . . . . . . . . . 11-7
:CRASTR . . . . . . . . . . . . . 11-7
:GARBCL . . . . . . . . . . . . . 11-7
:MEM . . . . . . . . . . . . . . . 11-3, 11-6
:PNAME . . . . . . . . . . . . . . 11-7
:TRYATOM . . . . . . . . . . . . . 11-7
@ . . . . . . . . . . . . . . . . 11-2
A1 . . . . . . . . . . . . . . . . 11-1
A2 . . . . . . . . . . . . . . . . 11-1
A3 . . . . . . . . . . . . . . . . 11-1
A4 . . . . . . . . . . . . . . . . 11-1
A5 . . . . . . . . . . . . . . . . 11-2
A6 . . . . . . . . . . . . . . . . 11-2
A7 . . . . . . . . . . . . . . . . 11-2
A8 . . . . . . . . . . . . . . . . 11-2
CAR . . . . . . . . . . . . . . . 11-5
CDR . . . . . . . . . . . . . . . 11-5
CONS . . . . . . . . . . . . . . . 11-5
FREE . . . . . . . . . . . . . . . 11-2
JNLIST . . . . . . . . . . . . . . 11-5
JPLIST . . . . . . . . . . . . . . 11-5
L . . . . . . . . . . . . . . . . 11-2
LAP . . . . . . . . . . . . . . . 11-1
LINK-10 . . . . . . . . . . . . . 11-3
MACLAP . . . . . . . . . . . . . . 11-5
NIL . . . . . . . . . . . . . . . 11-6
NUMB . . . . . . . . . . . . . . . 11-2
P . . . . . . . . . . . . . . . . 11-2
QUOTE . . . . . . . . . . . . . . 11-3
Registres . . . . . . . . . . . . 11-1
RG . . . . . . . . . . . . . . . . 11-1
STRG . . . . . . . . . . . . . . . 11-2
U1 . . . . . . . . . . . . . . . . 11-2
U2 . . . . . . . . . . . . . . . . 11-2
UNCONS . . . . . . . . . . . . . . 11-6